
package Type_2_linked.title1_P203;


import Type_2_linked.common.ListNode;

import static Type_2_linked.common.ListNode.createLinkedList;
import static Type_2_linked.common.ListNode.printListNode;

//203.移除链表元素（递归）
public class P203_3 {


    //移除链表元素
    public static ListNode removeElements(ListNode head, int val) {


        if (head == null) {
            return head;
        }

        // 假设 removeElements() 返回后面完整的已经去掉val节点的子链表
        // 在当前递归层用当前节点接住后面的子链表
        // 随后判断当前层的node是否需要被删除，如果是，就返回
        // 也可以先判断是否需要删除当前node，但是这样条件语句会比较不好想
        head.next = removeElements(head.next, val);
        if (head.val == val) {
            return head.next;
        }
        return head;

        // 实际上就是还原一个从尾部开始重新构建链表的过程QW
    }


    public static void main(String[] args) {

//        int[] arr = {};
        int[] arr = {1, 2, 6, 3, 4, 5, 6};
        int val = 6;
        ListNode head = createLinkedList(arr);  //TODO 创建链表


        ListNode result = removeElements(head, val);


        printListNode(result);  //打印
    }

}
